With the advent of virtual computing, it is known for a single hardware platform to guest many virtual machines. The platforms are often traditional, such as laptops, desktops, phones, PDAs, etc., and each virtual machine operates its own operating system, drivers, interfaces, applications, etc. on common assets of the platform. As has long been recognized, one of the key benefits for doing so is the ability to share workload throughput, such as by allocating physical resources to the virtual machines according to workload(s) being hosted. However, the state of the art today is anything but dynamic when it comes to allocating physical resources to virtual machines.
For instance, it is presently the situation that the creator of a virtual machine needs to, beforehand, specify all the physical resources requiring allocation to the machine. While the creator may have foreknowledge of the intended workload of the machine, sometimes no initial knowledge exists or such becomes inaccurate as the workload evolves over time. While some platforms allow modifying the initial allocation during running of the virtual machine, the current state of the art is far from supporting an environment where physical resources are optimally allocated to ensure meeting end-user mandated quality of service requirements. For instance, when memory is presently specified per each virtual machine, it is often the situation that the individual guest machines retain the initially allocated memory whether the workload requires it or not. In turn, by keeping otherwise available memory from other machines, a workload on a first virtual machine may not perform as expected while another may operate sufficiently, but with an overabundance of memory. The failure of the first machine, certainly, represents a failure in the quality of service.
Accordingly, a need exists in the art of virtual machine management for better (re)allocation of resources. The need further extends to allocating and managing physical memory to ensure that quality of service guarantees are met. Naturally, any improvements along such lines should further contemplate good engineering practices, such as ease of implementation, unobtrusiveness, stability, etc.